package com.sjd.mall.service.order;

import com.sjd.common.core.domain.AjaxResult;
import com.sjd.mall.domain.dto.base.OrderNoRequestDTO;
import com.sjd.mall.domain.dto.order.*;
import org.apache.commons.lang3.tuple.MutablePair;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单
 *
 * @author seer
 * @date 2022/1/13 0:04
 */
public interface WxOrderService {

    /**
     * 订单创建
     * 直接购买
     *
     * @param requestDTO requestDTO
     * @return object
     */
    AjaxResult create(WxOrderCreateRequestDTO requestDTO);

    /**
     * 订单创建
     * 购物车
     *
     * @param requestDTO requestDTO
     * @return object
     */
    AjaxResult createCart(WxOrderCreateCartRequestDTO requestDTO);

    /**
     * 订单支付
     *
     * @param requestDTO requestDTO
     * @return object
     */
    AjaxResult pay(OrderNoRequestDTO requestDTO);

    /**
     * 订单查询
     *
     * @param requestDTO requestDTO
     * @return object
     */
    List<WxOrderQryResponseDTO> qry(WxOrderQryRequestDTO requestDTO);

    /**
     * 订单退款
     *
     * @param requestDTO requestDTO
     * @return object
     */
    AjaxResult refund(OrderNoRequestDTO requestDTO);

    /**
     * 订单取消
     *
     * @param orderNo orderNo
     * @return object
     */
    AjaxResult cancel(String orderNo);

    /**
     * 订单自动取消，定时任务
     */
    void cancelQuartz();

    /**
     * 确认收货
     *
     * @param requestDTO requestDTO
     * @return object
     */
    AjaxResult receipt(OrderNoRequestDTO requestDTO);

    /**
     * 快递查询
     *
     * @param requestDTO requestDTO
     * @return object
     */
    AjaxResult courierQry(OrderNoRequestDTO requestDTO);

    /**
     * 订单创建
     *
     * @param addressId  addressId
     * @param goodsPair  goodsPair
     * @return object
     */
    AjaxResult baseCreate(Long addressId, List<MutablePair<Long, BigDecimal>> goodsPair);
}
